'use strict'
/**
 * 当用户输入 /home 路径，浏览器就会下载 home 模块。它可能包括多个控制器，针对 home 这个state。
 * 我们通过 state 的配置对象中的 resolve 属性就可以实现延迟加载。得益于 Webpack 的 require.ensure 方法，
 * 我们可以把 home 模块创建成第一个代码块。它就叫做 1.bundle.js 。如果没有 $ocLazyLoad.load ，
 * 我们会发现得到一个错误 Argument 'HomeController' is not a function, got undefined ，因为在 Angular 的设计中，
 * 启动应用之后再加载文件的方式是不可行的。 但是 $ocLazyLoad.load 使得我们可以在启动阶段注册一个模块，
 * 然后在它加载完之后再去使用它。
 * @param $urlRouterProvider
 * @param $stateProvider
 */
function homeRouting($urlRouterProvider, $stateProvider){
    $urlRouterProvider.otherwise("/");

    $stateProvider.state('home', {
        url: "/",
        template: require('./home.html'), // include small templates into routing configuration
        controller: 'HomeController as vm',
        resolve: {
            loadHomeController: ($q, $ocLazyLoad) => {
                return $q((resolve) => {
                    require.ensure([], () => {
                        // load whole module
                        let module = require('./home.index');
                        $ocLazyLoad.load({name: module.name});
                        resolve(module.controller);
                    });
                });
            }
        }
    });
}

export default angular
    .module('home.routing', [])
    .config(homeRouting).name;